package com.metering.purchaseServerAdmin.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.metering.purchaseServerAdmin.domain.Tree;

public class BuildTree {

	 public static <T> Tree<T> build(List<Tree<T>> nodes) {
	        if (nodes == null) {
	            return null;
	        }
	        List<Tree<T>> topNodes = new ArrayList<Tree<T>>();
	        for (Tree<T> child : nodes) {
	            String pid = child.getParentId();
	            if (pid == null || "0".equals(pid)) {
	                topNodes.add(child);
	                continue;
	            }
	            for (Tree<T> parent : nodes) {
	                String id = parent.getId();
	                if (id != null && id.equals(pid)) {
	                    parent.getChildren().add(child);
	                    child.setHasParent(true);
	                    parent.setChildren(true);
	                    continue;
	                }
	            }
	        }
	        Tree<T> root = new Tree<T>();
	        if (topNodes.size() == 1) {
	            root = topNodes.get(0);
	        } else {
	            root.setId("-1");
	            root.setParentId("");
	            root.setHasParent(false);
	            root.setChildren(true);
	            root.setChecked(true);
	            root.setChildren(topNodes);
	            root.setText("顶级节点");
	            Map<String, Object> state = new HashMap<>(16);
	            state.put("opened", true);
	            root.setState(state);
	        }
	        return root;
	    }
	 
	 public static <T> List<Tree<T>> buildList(List<Tree<T>> nodes, String idParam) {
	        if (nodes == null) {
	            return null;
	        }
	        List<Tree<T>> topNodes = new ArrayList<Tree<T>>();
	        for (Tree<T> child : nodes) {
	            String pid = child.getParentId();
	            if (pid == null || idParam.equals(pid)) {
	                topNodes.add(child);
	                continue;
	            }
	            for (Tree<T> parent : nodes) {
	                String id = parent.getId();
	                if (id != null && id.equals(pid)) {
	                    parent.getChildren().add(child);
	                    child.setHasParent(true);
	                    parent.setChildren(true);
	                    continue;
	                }
	            }
	        }
	        return topNodes;
	    }

}
